home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / misc / math / TCalcStats2c.lha / TCalcStats2c / AREXX / Shapiro.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  1999-07-02  |  28.3 KB  |  1,555 lines

  1. /*Shapiro-Wilk and Shapiro-Francia Tests for Normality*/
  2.  
  3. /*  Original Subroutines By:Paul Johnson
  4.               1420 Lake Blvd #29
  5.               Davis,California 95616
  6.              EZ006244@ALCOR.UCDAVIS.EDU
  7.  
  8.    These subroutines can be freely used for non-commercial purposes and can
  9.    be freely distributed. Copyright   1994, Paul Johnson 
  10.  
  11.    Changes and additions copyright 1999, Rudy Kohut
  12. */
  13.  
  14. options results
  15. if ~show('P','TCALC') then do
  16.     address command 'run turbocalc:turbocalc'
  17.     address command 'waitforport TCALC'
  18.     loadflag=1
  19. end
  20. address 'TCALC'
  21. 'DEFPUBSCREEN()'
  22. /* Add-in Rexx Math Library needed for some routines */
  23. signal on syntax
  24. if ~show('l','rexxmathlib.library') then
  25.    call addlib('rexxmathlib.library',0,-30)
  26. if ~show('l','rexxreqtools.library') then
  27.    call addlib('rexxreqtools.library',0,-30)
  28. if ~show('l','rexxsupport.library') then
  29.    call addlib('rexxsupport.library',0,-30)
  30.   /* add to library list */
  31. signal off syntax
  32.  
  33. /* Start Main Routine */
  34. if loadflag=1 then 'Load()'
  35. 'ActivateWindow()'
  36.  
  37. range=rtgetstring(,"Enter Cell Range for Input","Input Request") /*,,'rt_pubscrname="TCALC"')*/
  38. colon=pos(":",range)
  39. if colon=0 then do
  40.     'Message "Please select a range before executing this script"'
  41.     'DEFPUBSCREEN("Workbench")'
  42.     exit
  43. end
  44.  
  45. /* Find cell references and cell, column numbers */
  46. start_cell=substr(range,1,colon-1)
  47. end_cell=substr(range,colon+1)
  48. start_row=cellrow(start_cell)
  49. end_row=cellrow(end_cell)
  50. start_col=cellcol(start_cell)
  51. end_col=cellcol(end_cell)
  52. NRows=end_row-start_row+1
  53. NCols=end_col-start_col+1
  54. if (NCols >1) then do
  55.     'Message "Only One Column of Data Allowed"'
  56.     'DEFPUBSCREEN("Workbench")'
  57.     exit
  58. end
  59.  
  60.  
  61. /* Get cell reference for output range */
  62. out_cell=rtgetstring(,"Enter Cell Reference for Output","Input Request") /*,,'rt_pubscrname="TCALC"')*/
  63. if out_cell="" then do
  64.     'DEFPUBSCREEN("Workbench")'
  65.     exit
  66. end
  67. if length(out_cell)<2 | datatype(left(out_cell,1),'n') then do
  68.     'Message "Invalid cell reference"'
  69.     'DEFPUBSCREEN("Workbench")'
  70.     exit
  71. end
  72. /* Suppress Screen Redraw to Speed Things Up */
  73. 'Refresh 0'
  74.  
  75. /* Open a small output window on tcalc screen*/
  76. fo=0
  77. CR='0a'x
  78. DisplayMsg="Calculating...Please Wait."||CR||"User input is disabled during calculation."||CR
  79. if open(6Info, 'con:100/0/450/80/Progress/SCREEN TCALC', w) then do
  80.      call writeln(6Info, DisplayMsg)
  81.     fo=1
  82. end
  83. else do
  84.     'Message "TCALC Screen not available for Progress messages"'
  85. end
  86. CALL DELAY(150)
  87.  
  88. /* Get cell references for top cell in each column */
  89. 'SelectCell' start_cell
  90. do col=start_col to end_col
  91.     'GetCursorPos'
  92.     top_cell.col=result
  93.     'Column 1'
  94. end
  95.  
  96. /* Get labels for later use on output */
  97. title.=""
  98. 'SelectCell' start_cell
  99. 'GetValue'
  100. testlabel=result
  101. testlabel=strip(testlabel)
  102. if datatype(testlabel,'n')=1 then do
  103.     labelflag=0
  104.     do x=1 to NCols
  105.     title.x="Column "||x
  106.     end
  107. end
  108. else do
  109.     labelflag=1
  110.     NRows=NRows-1
  111.     do x=1 to NCols
  112.     'GetValue'
  113.     str=result
  114.     title.x=translate(strip(str),"_"," ")
  115.     'Column 1'
  116.     end
  117. end
  118.  
  119. /* Get data from cell range */
  120. col=start_col
  121. lav=0
  122. tot=0
  123. count.=0
  124. total.=0
  125. X.=0
  126.     'SelectCell' top_cell.col
  127.     if labelflag=1 then 'CursorDown 1'
  128.     do y=1 to NRows
  129.         'GetValue'
  130.         valtest=result
  131.         if datatype(valtest)='NUM' then do
  132.             'GetValue'
  133.             val=result
  134.             X.y=val
  135.             tot=tot+val
  136.             total.x=tot
  137.             count.x=1+count.x
  138.         end
  139.         'CursorDown 1'
  140.     end
  141. if fo then call writech(6Info,"Progress...10 ")
  142.  
  143. /* Which test to use? */
  144. string=""
  145. Select
  146.     When NRows<51 then DO
  147.         'Message "N < 51 - Doing Shapiro-Wilk Test"'
  148.         call TEST1(NRows)
  149.     End
  150.     When NRows>50 then DO
  151.         'Message "N > 50 - Doing Shapiro-Francis Test"'
  152.         call TEST2(NRows)
  153.     End
  154.     Otherwise nop
  155. end
  156. if fo then do
  157.     call writeln(6Info,"100")
  158.     call writeln(6Info,"Writing output to window...")
  159. end
  160.  
  161. /* Output */
  162. 'SelectCell' out_cell
  163. 'ColumnWidth 15'
  164. str=translate(strip(string),"_"," ")
  165. 'Put' str
  166. 'CursorDown 1'
  167. 'Alignment 2'
  168. 'Put "W:"'
  169. 'CursorRight 1'
  170. 'Alignment 1'
  171. 'Put' format(Y.1,,5)
  172. 'CursorDown 1'
  173. 'Alignment 1'
  174. 'Put' format(G,,5)
  175. 'CursorLeft 1'
  176. 'Alignment 2'
  177. 'Put "G:"'
  178. 'CursorDown 1'
  179. 'Alignment 2'
  180. 'Put "p-value:"'
  181. 'CursorRight 1'
  182. 'Alignment 1'
  183. 'Put' format(P,,4)
  184. 'Refresh 1'
  185. 'Refresh 2'
  186. /*'Message' "Finished"*/
  187. /*indicate the main script is finished*/
  188. DisplayMsg="Cleaning up ...."||CR||"Exiting"
  189. result=writeln(6Info, DisplayMsg)
  190. if result~=0 then do
  191.     /*Wait 3 seconds*/
  192.     CALL DELAY(150)
  193.     /* close window*/
  194.     result=close(6Info)
  195. end
  196. 'DEFPUBSCREEN("Workbench")'
  197. exit
  198.  
  199.  
  200. /* Shapiro-Wilk W Test of Normality for Small Samples */
  201. TEST1: Procedure Expose fo G P string X. Y.
  202.     parse arg N
  203.     string="Shapiro-Wilk W Test of Normality for Small Samples"
  204.     X1.=0
  205.     Y.=0
  206.     A.=0
  207.     B.=0
  208.     C.=0
  209.     D.=0
  210.     G=0
  211.       SUMB=0
  212.       SUMX=0
  213.       SUMX2=0
  214.       K=N/2
  215.       IF (N > 50) then do
  216.         'Message "Sample size limited to 50"'
  217.         exit
  218.     end
  219.     IF N<7 then DO
  220.         'Message "Sample size is small - check results!"'
  221.     END
  222.       DO I =1 to N
  223.           SUMX=SUMX+X.I
  224.           SUMX2=SUMX2+(X.I)**2
  225.        X1.I=X.I
  226.     End
  227.     if fo then call writech(6Info,"20 ")
  228.       S2=SUMX2-SUMX**2/N
  229.       CALL SORTX(N)
  230.     if fo then call writech(6Info,"40 ")
  231. IF N>39 then
  232.     SELECT
  233.         WHEN N=50 THEN DO
  234.       A.1  = 0.3751
  235.       A.2  = 0.2574
  236.       A.3  = 0.2260
  237.       A.4  = 0.2032
  238.       A.5  = 0.1847
  239.       A.6  = 0.1691
  240.       A.7  = 0.1554
  241.       A.8  = 0.1430
  242.       A.9  = 0.1317
  243.       A.10 = 0.1212
  244.       A.11 = 0.1113
  245.       A.12 = 0.1020
  246.       A.13 = 0.0932
  247.       A.14 = 0.0846
  248.       A.15 = 0.0764
  249.       A.16 = 0.0685
  250.       A.17 = 0.0608
  251.       A.18 = 0.0532
  252.       A.19 = 0.0459
  253.       A.20 = 0.0386
  254.       A.21 = 0.0314
  255.       A.22 = 0.0244
  256.       A.23 = 0.0174
  257.       A.24 = 0.0104
  258.       A.25 = 0.0035
  259.     B.50=-7.677
  260.     C.50=2.212
  261.     D.50=.1436
  262.     END
  263.         WHEN N=49 THEN DO
  264.       A.1  = 0.3770
  265.       A.2  = 0.2589
  266.       A.3  = 0.2271
  267.       A.4  = 0.2038
  268.       A.5  = 0.1851
  269.       A.6  = 0.1692
  270.       A.7  = 0.1553
  271.       A.8  = 0.1427
  272.       A.9  = 0.1312
  273.       A.10 = 0.1205
  274.       A.11 = 0.1105
  275.       A.12 = 0.1010
  276.       A.13 = 0.0919
  277.       A.14 = 0.0832
  278.       A.15 = 0.0748
  279.       A.16 = 0.0667
  280.       A.17 = 0.0588
  281.       A.18 = 0.0511
  282.       A.19 = 0.0436
  283.       A.20 = 0.0361
  284.       A.21 = 0.0288
  285.       A.22 = 0.0215
  286.       A.23 = 0.0143
  287.       A.24 = 0.0071
  288.     B.49=-7.615
  289.     C.49=2.198
  290.     D.49=.1451
  291.     END
  292.         WHEN N=48 THEN DO
  293.       A.1  = 0.3789
  294.       A.2  = 0.2604
  295.       A.3  = 0.2281
  296.       A.4  = 0.2045
  297.       A.5  = 0.1855
  298.       A.6  = 0.1693
  299.       A.7  = 0.1551
  300.       A.8  = 0.1423
  301.       A.9  = 0.1306
  302.       A.10 = 0.1197
  303.       A.11 = 0.1095
  304.       A.12 = 0.0998
  305.       A.13 = 0.0906
  306.       A.14 = 0.0817
  307.       A.15 = 0.0731
  308.       A.16 = 0.0648
  309.       A.17 = 0.0568
  310.       A.18 = 0.0489
  311.       A.19 = 0.0411
  312.       A.20 = 0.0335
  313.       A.21 = 0.0259
  314.       A.22 = 0.0185
  315.       A.23 = 0.0111
  316.       A.24 = 0.0037
  317.     B.48=-7.555
  318.     C.48=2.183
  319.     D.48=.1466
  320.     END
  321.         WHEN N=47 THEN DO
  322.       A.1  = 0.3808
  323.       A.2  = 0.2620
  324.       A.3  = 0.2291
  325.       A.4  = 0.2052
  326.       A.5  = 0.1859
  327.       A.6  = 0.1695
  328.       A.7  = 0.1550
  329.       A.8  = 0.1420
  330.       A.9  = 0.1300
  331.       A.10 = 0.1189
  332.       A.11 = 0.1085
  333.       A.12 = 0.0986
  334.       A.13 = 0.0892
  335.       A.14 = 0.0801
  336.       A.15 = 0.0713
  337.       A.16 = 0.0628
  338.       A.17 = 0.0546
  339.       A.18 = 0.0465
  340.       A.19 = 0.0385
  341.       A.20 = 0.0307
  342.       A.21 = 0.0229
  343.       A.22 = 0.0153
  344.       A.23 = 0.0076
  345.     B.47=-7.484
  346.     C.47=2.169
  347.     D.47=.1482
  348.     END
  349.         WHEN N=46 THEN DO
  350.       A.1  = 0.3830
  351.       A.2  = 0.2635
  352.       A.3  = 0.2302
  353.       A.4  = 0.2058
  354.       A.5  = 0.1862
  355.       A.6  = 0.1695
  356.       A.7  = 0.1548
  357.       A.8  = 0.1415
  358.       A.9  = 0.1293
  359.       A.10 = 0.1180
  360.       A.11 = 0.1073
  361.       A.12 = 0.0972
  362.       A.13 = 0.0876
  363.       A.14 = 0.0783
  364.       A.15 = 0.0694
  365.       A.16 = 0.0607
  366.       A.17 = 0.0522
  367.       A.18 = 0.0439
  368.       A.19 = 0.0357
  369.       A.20 = 0.0277
  370.       A.21 = 0.0197
  371.       A.22 = 0.0118
  372.       A.23 = 0.0039
  373.     B.46=-7.414
  374.     C.46=2.155
  375.     D.46=.1499
  376.     END
  377.         WHEN N=45 THEN DO
  378.       A.1  = 0.3850
  379.       A.2  = 0.2651
  380.       A.3  = 0.2313
  381.       A.4  = 0.2065
  382.       A.5  = 0.1865
  383.       A.6  = 0.1695
  384.       A.7  = 0.1545
  385.       A.8  = 0.1410
  386.       A.9  = 0.1286
  387.       A.10 = 0.1170
  388.       A.11 = 0.1062
  389.       A.12 = 0.0959
  390.       A.13 = 0.0860
  391.       A.14 = 0.0765
  392.       A.15 = 0.0673
  393.       A.16 = 0.0584
  394.       A.17 = 0.0497
  395.       A.18 = 0.0412
  396.       A.19 = 0.0328
  397.       A.20 = 0.0245
  398.       A.21 = 0.0163
  399.       A.22 = 0.0081
  400.     B.45=-7.345
  401.     C.45=2.141
  402.     D.45=.1516
  403.     END
  404.         WHEN N=44 THEN DO
  405.       A.1  = 0.3872
  406.       A.2  = 0.2667
  407.       A.3  = 0.2323
  408.       A.4  = 0.2072
  409.       A.5  = 0.1868
  410.       A.6  = 0.1695
  411.       A.7  = 0.1542
  412.       A.8  = 0.1405
  413.       A.9  = 0.1278
  414.       A.10 = 0.1160
  415.       A.11 = 0.1049
  416.       A.12 = 0.0943
  417.       A.13 = 0.0842
  418.       A.14 = 0.0745
  419.       A.15 = 0.0651
  420.       A.16 = 0.0560
  421.       A.17 = 0.0471
  422.       A.18 = 0.0383
  423.       A.19 = 0.0296
  424.       A.20 = 0.0211
  425.       A.21 = 0.0126
  426.       A.22 = 0.0042
  427.     B.44=-7.266
  428.     C.44=2.128
  429.     D.44=.1534
  430.     END
  431.         WHEN N=43 THEN DO
  432.       A.1  = 0.3894
  433.       A.2  = 0.2684
  434.       A.3  = 0.2334
  435.       A.4  = 0.2078
  436.       A.5  = 0.1871
  437.       A.6  = 0.1695
  438.       A.7  = 0.1539
  439.       A.8  = 0.1398
  440.       A.9  = 0.1269
  441.       A.10 = 0.1149
  442.       A.11 = 0.1035
  443.       A.12 = 0.0927
  444.       A.13 = 0.0824
  445.       A.14 = 0.0724
  446.       A.15 = 0.0628
  447.       A.16 = 0.0534
  448.       A.17 = 0.0442
  449.       A.18 = 0.0352
  450.       A.19 = 0.0263
  451.       A.20 = 0.0175
  452.       A.21 = 0.0087
  453.     B.43=-7.188
  454.     C.43=2.114
  455.     D.43=.1552
  456.     END
  457.         WHEN N=42 THEN DO
  458.       A.1  = 0.3917
  459.       A.2  = 0.2701
  460.       A.3  = 0.2345
  461.       A.4  = 0.2085
  462.       A.5  = 0.1874
  463.       A.6  = 0.1694
  464.       A.7  = 0.1535
  465.       A.8  = 0.1392
  466.       A.9  = 0.1259
  467.       A.10 = 0.1136
  468.       A.11 = 0.1020
  469.       A.12 = 0.0909
  470.       A.13 = 0.0804
  471.       A.14 = 0.0701
  472.       A.15 = 0.0602
  473.       A.16 = 0.0506
  474.       A.17 = 0.0411
  475.       A.18 = 0.0318
  476.       A.19 = 0.0227
  477.       A.20 = 0.0136
  478.       A.21 = 0.0045
  479.     B.42=-7.111
  480.     C.42=2.101
  481.     D.42=.1572
  482.     END
  483.         WHEN N=41 THEN DO
  484.       A.1  = 0.3940
  485.       A.2  = 0.2719
  486.       A.3  = 0.2357
  487.       A.4  = 0.2091
  488.       A.5  = 0.1876
  489.       A.6  = 0.1693
  490.       A.7  = 0.1531
  491.       A.8  = 0.1384
  492.       A.9  = 0.1249
  493.       A.10 = 0.1123
  494.       A.11 = 0.1004
  495.       A.12 = 0.0891
  496.       A.13 = 0.0782
  497.       A.14 = 0.0677
  498.       A.15 = 0.0575
  499.       A.16 = 0.0476
  500.       A.17 = 0.0379
  501.       A.18 = 0.0283
  502.       A.19 = 0.0188
  503.       A.20 = 0.0094
  504.     B.41=-7.035
  505.     C.41=2.088
  506.     D.41=.1591
  507.     END
  508.         WHEN N=40 THEN DO
  509.       A.1  = 0.3964
  510.       A.2  = 0.2737
  511.       A.3  = 0.2368
  512.       A.4  = 0.2098
  513.       A.5  = 0.1878
  514.       A.6  = 0.1691
  515.       A.7  = 0.1526
  516.       A.8  = 0.1376
  517.       A.9  = 0.1237
  518.       A.10 = 0.1108
  519.       A.11 = 0.0986
  520.       A.12 = 0.0870
  521.       A.13 = 0.0759
  522.       A.14 = 0.0651
  523.       A.15 = 0.0546
  524.       A.16 = 0.0444
  525.       A.17 = 0.0343
  526.       A.18 = 0.0244
  527.       A.19 = 0.0146
  528.       A.20 = 0.0049
  529.     B.40=-6.961
  530.     C.40=2.075
  531.     D.40=.1612
  532.     END
  533.     OTHERWISE NOP
  534.     END
  535. IF N>29 & N<40 then
  536.     SELECT
  537.         WHEN N=39 THEN DO
  538.       A.1  = 0.3989
  539.       A.2  = 0.2755
  540.       A.3  = 0.2380
  541.       A.4  = 0.2104
  542.       A.5  = 0.1880
  543.       A.6  = 0.1689
  544.       A.7  = 0.1520
  545.       A.8  = 0.1366
  546.       A.9  = 0.1225
  547.       A.10 = 0.1092
  548.       A.11 = 0.0967
  549.       A.12 = 0.0848
  550.       A.13 = 0.0733
  551.       A.14 = 0.0622
  552.       A.15 = 0.0515
  553.       A.16 = 0.0409
  554.       A.17 = 0.0305
  555.       A.18 = 0.0203
  556.       A.19 = 0.0101
  557.     B.39=-6.887
  558.     C.39=2.062
  559.     D.39=.1633
  560.     END
  561.         WHEN N=38 THEN DO
  562.       A.1  = 0.4015
  563.       A.2  = 0.2774
  564.       A.3  = 0.2391
  565.       A.4  = 0.2110
  566.       A.5  = 0.1881
  567.       A.6  = 0.1686
  568.       A.7  = 0.1513
  569.       A.8  = 0.1356
  570.       A.9  = 0.1211
  571.       A.10 = 0.1075
  572.       A.11 = 0.0947
  573.       A.12 = 0.0824
  574.       A.13 = 0.0706
  575.       A.14 = 0.0592
  576.       A.15 = 0.0481
  577.       A.16 = 0.0372
  578.       A.17 = 0.0264
  579.       A.18 = 0.0158
  580.       A.19 = 0.0053
  581.     B.38=-6.803
  582.     C.38=2.049
  583.     D.38=.1656
  584.     END
  585.         WHEN N=37 THEN DO
  586.       A.1  = 0.4040
  587.       A.2  = 0.2794
  588.       A.3  = 0.2403
  589.       A.4  = 0.2116
  590.       A.5  = 0.1883
  591.       A.6  = 0.1683
  592.       A.7  = 0.1505
  593.       A.8  = 0.1344
  594.       A.9  = 0.1196
  595.       A.10 = 0.1056
  596.       A.11 = 0.0924
  597.       A.12 = 0.0798
  598.       A.13 = 0.0677
  599.       A.14 = 0.0559
  600.       A.15 = 0.0444
  601.       A.16 = 0.0331
  602.       A.17 = 0.0220
  603.       A.18 = 0.0110
  604.     B.37=-6.721
  605.     C.37=2.037
  606.     D.37=.1677
  607.     END
  608.         WHEN N=36 THEN DO
  609.       A.1  = 0.4068
  610.       A.2  = 0.2813
  611.       A.3  = 0.2415
  612.       A.4  = 0.2121
  613.       A.5 = 0.1883
  614.       A.6 = 0.1678
  615.       A.7 = 0.1496
  616.       A.8 = 0.1331
  617.       A.9 = 0.1179
  618.       A.10 = 0.1036
  619.       A.11 = 0.0900
  620.       A.12 = 0.0770
  621.       A.13 = 0.0645
  622.       A.14 = 0.0523
  623.       A.15 = 0.0404
  624.       A.16 = 0.0287
  625.       A.17 = 0.0172
  626.       A.18 = 0.0057
  627.     B.36=-6.640
  628.     C.36=2.024
  629.     D.36=.1702
  630.     END
  631.         WHEN N=35 THEN DO
  632.       A.1  = 0.4096
  633.       A.2  = 0.2834
  634.       A.3  = 0.2427
  635.       A.4  = 0.2127
  636.       A.5  = 0.1883
  637.       A.6  = 0.1673
  638.       A.7  = 0.1487
  639.       A.8  = 0.1317
  640.       A.9  = 0.1160
  641.       A.10 = 0.1013
  642.       A.11 = 0.0873
  643.       A.12 = 0.0739
  644.       A.13 = 0.0610
  645.       A.14 = 0.0484
  646.       A.15 = 0.0361
  647.       A.16 = 0.0239
  648.       A.17 = 0.0119
  649.     B.35=-6.559
  650.     C.35=2.012
  651.     D.35=.1727
  652.     END
  653.         WHEN N=34 THEN DO
  654.       A.1  = 0.4127
  655.       A.2  = 0.2854
  656.       A.3  = 0.2439
  657.       A.4  = 0.2132
  658.       A.5  = 0.1882
  659.       A.6  = 0.1667
  660.       A.7  = 0.1475
  661.       A.8  = 0.1301
  662.       A.9  = 0.1140
  663.       A.10 = 0.0988
  664.       A.11 = 0.0844
  665.       A.12 = 0.0706
  666.       A.13 = 0.0572
  667.       A.14 = 0.0441
  668.       A.15 = 0.0314
  669.       A.16 = 0.0187
  670.       A.17 = 0.0062
  671.     B.34=-6.480
  672.     C.34=2.0
  673.     D.34=.1755
  674.     END
  675.         WHEN N=33 THEN DO
  676.       A.1  = 0.4156
  677.       A.2  = 0.2876
  678.       A.3  = 0.2451
  679.       A.4  = 0.2137
  680.       A.5  = 0.1880
  681.       A.6  = 0.1660
  682.       A.7  = 0.1463
  683.       A.8  = 0.1284
  684.       A.9  = 0.1118
  685.       A.10 = 0.0961
  686.       A.11 = 0.0812
  687.       A.12 = 0.0669
  688.       A.13 = 0.0530
  689.       A.14 = 0.0395
  690.       A.15 = 0.0262
  691.       A.16 = 0.0131
  692.     B.33=-6.402
  693.     C.33=1.988
  694.     D.33=.1781
  695.     END
  696.         WHEN N=32 THEN DO
  697.       A.1  = 0.4188
  698.       A.2  = 0.2898
  699.       A.3  = 0.2463
  700.       A.4  = 0.2141
  701.       A.5  = 0.1878
  702.       A.6  = 0.1651
  703.       A.7  = 0.1449
  704.       A.8  = 0.1265
  705.       A.9  = 0.1093
  706.       A.10 = 0.0931
  707.       A.11 = 0.0777
  708.       A.12 = 0.0629
  709.       A.13 = 0.0485
  710.       A.14 = 0.0344
  711.       A.15 = 0.0206
  712.       A.16 = 0.0068
  713.     B.32=-6.324
  714.     C.32=1.976
  715.     D.32=.1811
  716.     END
  717.         WHEN N=31 THEN DO
  718.       A.1  = 0.4220
  719.       A.2  = 0.2921
  720.       A.3  = 0.2475
  721.       A.4  = 0.2145
  722.       A.5  = 0.1874
  723.       A.6  = 0.1641
  724.       A.7  = 0.1433
  725.       A.8  = 0.1243
  726.       A.9  = 0.1066
  727.       A.10 = 0.0899
  728.       A.11 = 0.0739
  729.       A.12 = 0.0585
  730.       A.13 = 0.0435
  731.       A.14 = 0.0289
  732.       A.15 = 0.0144
  733.     B.31=-6.248
  734.     C.31=1.965
  735.     D.31=.1840
  736.     END
  737.         WHEN N=30 THEN DO
  738.       A.1  = 0.4254
  739.       A.2  = 0.2944
  740.       A.3  = 0.2487
  741.       A.4  = 0.2148
  742.       A.5  = 0.1870
  743.       A.6  = 0.1630
  744.       A.7  = 0.1415
  745.       A.8  = 0.1219
  746.       A.9  = 0.1036
  747.       A.10 = 0.0862
  748.       A.11 = 0.0697
  749.       A.12 = 0.0537
  750.       A.13 = 0.0381
  751.       A.14 = 0.0227
  752.       A.15 = 0.0076
  753.     B.30=-6.150
  754.     C.30=1.949
  755.     D.30=.1872
  756.     END
  757.     OTHERWISE NOP
  758.     END
  759. IF N>19 & N<30 then
  760.     SELECT
  761.         WHEN N=29 THEN DO
  762.       A.1  = 0.4291
  763.       A.2  = 0.2968
  764.       A.3  = 0.2499
  765.       A.4  = 0.2150
  766.       A.5  = 0.1864
  767.       A.6  = 0.1616
  768.       A.7  = 0.1395
  769.       A.8  = 0.1192
  770.       A.9  = 0.1002
  771.       A.10 = 0.0822
  772.       A.11 = 0.0650
  773.       A.12 = 0.0483
  774.       A.13 = 0.0320
  775.       A.14 = 0.0159
  776.     B.29=-6.074
  777.     C.29=1.934
  778.     D.29=.1907
  779.     END
  780.         WHEN N=28 THEN DO
  781.       A.1  = 0.4328
  782.       A.2  = 0.2992
  783.       A.3  = 0.2510
  784.       A.4  = 0.2151
  785.       A.5  = 0.1857
  786.       A.6  = 0.1601
  787.       A.7  = 0.1372
  788.       A.8  = 0.1162
  789.       A.9  = 0.0965
  790.       A.10 = 0.0778
  791.       A.11 = 0.0598
  792.       A.12 = 0.0424
  793.       A.13 = 0.0253
  794.       A.14 = 0.0084
  795.     B.28=-5.988
  796.     C.28=1.919
  797.     D.28=.1943
  798.     END
  799.         WHEN N=27 THEN DO
  800.       A.1  = 0.4366
  801.       A.2  = 0.3018
  802.       A.3  = 0.2522
  803.       A.4  = 0.2152
  804.       A.5  = 0.1848
  805.       A.6  = 0.1584
  806.       A.7  = 0.1346
  807.       A.8  = 0.1128
  808.       A.9  = 0.0923
  809.       A.10 = 0.0728
  810.       A.11 = 0.0540
  811.       A.12 = 0.0358
  812.       A.13 = 0.0178
  813.     B.27=-5.905
  814.     C.27=1.905
  815.     D.27=.1980
  816.     END
  817.         WHEN N=26 THEN DO
  818.       A.1  = 0.4407
  819.       A.2  = 0.3043
  820.       A.3  = 0.2533
  821.       A.4  = 0.2151
  822.       A.5  = 0.1836
  823.       A.6  = 0.1563
  824.       A.7  = 0.1316
  825.       A.8  = 0.1089
  826.       A.9  = 0.0876
  827.       A.10 = 0.0672
  828.       A.11 = 0.0476
  829.       A.12 = 0.0284
  830.       A.13 = 0.0094
  831.     B.26=-5.803
  832.     C.26=1.89
  833.     D.26=.2020
  834.     END
  835.         WHEN N=25 THEN DO
  836.       A.1  = 0.4450
  837.       A.2  = 0.3069
  838.       A.3  = 0.2543
  839.       A.4  = 0.2148
  840.       A.5  = 0.1822
  841.       A.6  = 0.1539
  842.       A.7  = 0.1283
  843.       A.8  = 0.1046
  844.       A.9  = 0.0823
  845.       A.10 = 0.0610
  846.       A.11 = 0.0403
  847.       A.12 = 0.0200
  848.     B.25=-5.704
  849.     C.25=1.876
  850.     D.25=.2063
  851.     END
  852.         WHEN N=24 THEN DO
  853.       A.1  = 0.4493
  854.       A.2  = 0.3098
  855.       A.3  = 0.2554
  856.       A.4  = 0.2145
  857.       A.5  = 0.1807
  858.       A.6  = 0.1512
  859.       A.7  = 0.1245
  860.       A.8  = 0.0997
  861.       A.9  = 0.0764
  862.       A.10 = 0.0539
  863.       A.11 = 0.0321
  864.       A.12 = 0.0107
  865.     B.24=-5.605
  866.     C.24=1.862
  867.     D.24=.2106
  868.     END
  869.         WHEN N=23 THEN DO
  870.       A.1  = 0.4542
  871.       A.2  = 0.3126
  872.       A.3  = 0.2563
  873.       A.4  = 0.2139
  874.       A.5  = 0.1787
  875.       A.6  = 0.1480
  876.       A.7  = 0.1201
  877.       A.8  = 0.0941
  878.       A.9  = 0.0696
  879.       A.10 = 0.0459
  880.       A.11 = 0.0228
  881.     B.23=-5.508
  882.     C.23=1.848
  883.     D.23=.2157
  884.     END
  885.         WHEN N=22 THEN DO
  886.       A.1  = 0.4590
  887.       A.2  = 0.3156
  888.       A.3  = 0.2571
  889.       A.4  = 0.2131
  890.       A.5  = 0.1764
  891.       A.6  = 0.1443
  892.       A.7  = 0.1150
  893.       A.8  = 0.0878
  894.       A.9  = 0.0618
  895.       A.10 = 0.0368
  896.       A.11 = 0.0122
  897.     B.22=-5.413
  898.     C.22=1.835
  899.     D.22=.2207
  900.     END
  901.         WHEN N=21 THEN DO
  902.       A.1  = 0.4643
  903.       A.2  = 0.3185
  904.       A.3  = 0.2578
  905.       A.4  = 0.2119
  906.       A.5  = 0.1736
  907.       A.6  = 0.1399
  908.       A.7  = 0.1092
  909.       A.8  = 0.0804
  910.       A.9  = 0.0530
  911.       A.10 = 0.0263
  912.     B.21=-5.291
  913.     C.21=1.818
  914.     D.21=.2264
  915.     END
  916.         WHEN N=20 THEN DO
  917.       A.1  = 0.4734
  918.       A.2  = 0.3211
  919.       A.3  = 0.2565
  920.       A.4  = 0.2085
  921.       A.5  = 0.1686
  922.       A.6  = 0.1334
  923.       A.7  = 0.1013
  924.       A.8  = 0.0711
  925.       A.9  = 0.0422
  926.       A.10 = 0.0140
  927.     B.20=-5.153
  928.     C.20=1.802
  929.     D.20=.2359
  930.     END
  931.     OTHERWISE NOP
  932.     END
  933. IF N>9 & N<20 then
  934.     SELECT
  935.         WHEN N=19 THEN DO
  936.       A.1  = 0.4808
  937.       A.2  = 0.3232
  938.       A.3  = 0.2561
  939.       A.4  = 0.2059
  940.       A.5  = 0.1641
  941.       A.6  = 0.1271
  942.       A.7  = 0.0932
  943.       A.8  = 0.0612
  944.       A.9  = 0.0303
  945.     B.19=-5.018
  946.     C.19=1.786
  947.     D.19=.244
  948.     END
  949.         WHEN N=18 THEN DO
  950.       A.1=0.4886
  951.       A.2=0.3253
  952.       A.3=0.2553
  953.       A.4=0.2027
  954.       A.5=0.1587
  955.       A.6=0.1197
  956.       A.7=0.0837
  957.       A.8=0.0496
  958.       A.9=0.0163
  959.     B.18=-4.885
  960.     C.18=1.77
  961.     D.18=.2528
  962.     END
  963.         WHEN N=17 THEN DO
  964.       A.1=0.4968
  965.       A.2=0.3273
  966.       A.3=0.2540
  967.       A.4=0.1988
  968.       A.5=0.1524
  969.       A.6=0.1109
  970.       A.7=0.0725
  971.       A.8=0.0359
  972.     B.17=-4.713
  973.     C.17=1.739
  974.     D.17=.2622
  975.     END
  976.         WHEN N=16 THEN DO
  977.     A.1=0.5056
  978.     A.2=0.3290
  979.       A.3=0.2521
  980.       A.4=0.1939
  981.       A.5=0.1447
  982.       A.6=0.1005
  983.       A.7=0.0593
  984.       A.8=0.0196
  985.     B.16=-4.567
  986.     C.16=1.724
  987.     D.16=.2727
  988.     END
  989.         WHEN N=15 THEN DO
  990.       A.1=0.5150
  991.       A.2=0.3306
  992.       A.3=0.2495
  993.       A.4=0.1878
  994.       A.5=0.1353
  995.       A.6=0.0880
  996.       A.7=0.0433
  997.     B.15=-4.373
  998.     C.15=1.695
  999.     D.15=.2842
  1000.     END
  1001.         WHEN N=14 THEN DO
  1002.       A.1=0.5251
  1003.       A.2=0.3318
  1004.       A.3=0.2460
  1005.       A.4=0.1802
  1006.       A.5=0.1240
  1007.       A.6=0.0727
  1008.       A.7=0.0240
  1009.     B.14=-4.155
  1010.     C.14=1.655
  1011.     D.14=.2969
  1012.     END
  1013.         WHEN N=13 THEN DO
  1014.       A.1=0.5359
  1015.       A.2=0.3325
  1016.       A.3=0.2412
  1017.       A.4=0.1707
  1018.     A.5=0.1099
  1019.     A.6=0.0539
  1020.     B.13=-3.936
  1021.     C.13=1.613
  1022.     D.13=.3111
  1023.     END
  1024.         WHEN N=12 THEN DO
  1025.       A.1=0.5475
  1026.     A.2=0.3325
  1027.     A.3=0.2347
  1028.     A.4=0.1586
  1029.     A.5=0.0922
  1030.     A.6=0.0303
  1031.     B.12=-3.731
  1032.     C.12=1.571
  1033.     D.12=.327
  1034.     END
  1035.         WHEN N=11 THEN DO
  1036.     A.1=0.5601
  1037.     A.2=0.3315
  1038.     A.3=0.2260
  1039.     A.4=0.1429
  1040.     A.5=0.0695
  1041.     B.11=-3.485
  1042.     C.11=1.515
  1043.     D.11=.3451
  1044.     END
  1045.         WHEN N=10 THEN DO
  1046.     A.1=0.5739
  1047.     A.2=0.3291
  1048.     A.3=0.2141
  1049.     A.4=0.1224
  1050.     A.5=0.0399
  1051.     B.10=-3.262
  1052.     C.10=1.471
  1053.     D.10=.36
  1054.     END
  1055.     OTHERWISE NOP
  1056.     END
  1057. IF N>2 & N<10 then
  1058.     SELECT
  1059.         WHEN N=9 THEN DO
  1060.     A.1=0.5888
  1061.     A.2=0.3244
  1062.     A.3=0.1976
  1063.     A.4=0.0947
  1064.     B.9=-2.968
  1065.     C.9=1.4
  1066.     D.9=.39
  1067.     END
  1068.         WHEN N=8 THEN DO
  1069.     A.1=0.6052
  1070.     A.2=0.3164
  1071.     A.3=0.1743
  1072.     A.4=0.0561
  1073.     B.8=-2.696
  1074.     C.8=1.333
  1075.     D.8=.4186
  1076.     END
  1077.         WHEN N=7 THEN DO
  1078.     A.1=0.6233
  1079.     A.2=0.3031
  1080.     A.3=0.1401
  1081.     B.7=-2.356
  1082.     C.7=1.245
  1083.     D.7=.4533
  1084.     END
  1085.         WHEN N=6 THEN DO
  1086.     A.1=0.6431
  1087.     A.2=0.2806
  1088.     A.3=0.0875
  1089.     D.6=.4963
  1090.     END
  1091.         WHEN N=5 THEN DO
  1092.     A.1=0.6646
  1093.       A.2=0.2413
  1094.     D.5=.5521
  1095.     END
  1096.         WHEN N=4 THEN DO
  1097.     A.1=0.6872
  1098.     A.2=0.1677
  1099.     D.4=.6297
  1100.     END
  1101.         OTHERWISE DO
  1102.             A.1=0.7071
  1103.             D.3=.75
  1104.         END
  1105.     END
  1106.     if fo then call writech(6Info,"80 ")
  1107.     DO I=1 to K
  1108.               J=N-I+1
  1109.           SUMB=SUMB+A.I*(X.J-X.I)
  1110.     End
  1111.           Y.1=SUMB**2/S2
  1112.       DO I=1 to N
  1113.           X.I=X1.I
  1114.     End
  1115.     IF N>6 THEN G=B.N+C.N*LN((Y.1-D.N)/(1-Y.1))
  1116.     ELSE DO
  1117.         V=LN((Y.1-D.N)/(1-Y.1))
  1118.         G=SWTAB(V,N)
  1119.     END
  1120.     P=calcp(G)
  1121. RETURN Y.1
  1122.  
  1123. /* Shapiro-Francia W' Test of Normality for Large Samples */
  1124. TEST2: Procedure Expose fo string X. Y.
  1125.     parse arg N
  1126.     string="Shapiro-Francia W Test of Normality for Large Samples"
  1127.     X1.=0
  1128.     Y.=0
  1129.     Z.=0
  1130.     P.=0
  1131.       SUMA=0
  1132.       SUMB=0
  1133.       SUMC=0
  1134.       SUMD=0
  1135.       DO I =1 to N
  1136.            X1.I=X.I
  1137.     End
  1138.       CALL SORTX(N)
  1139.     if fo then call writech(6Info,"20 ")
  1140.       DO I = 1 to N
  1141.            P.I=(I-.375)/(0.25+N)
  1142.     End
  1143.     if fo then call writech(6Info,"40 ")
  1144.       DO I=1 to N
  1145.            Z.I=XINORMAL(P.I)
  1146.     End
  1147.     if fo then call writech(6Info,"60 ")
  1148.       DO I=1 to N
  1149.           SUMA=SUMA+(Z.I*X.I)
  1150.           SUMB=SUMB+(Z.I**2)
  1151.           SUMC=SUMC+X.I
  1152.        SUMD=SUMD+X.I**2
  1153.     End
  1154.     if fo then call writech(6Info,"80 ")
  1155.       Y.1=(SUMA**2/SUMB)/(SUMD-SUMC**2/N)
  1156.       DO I=1 to N
  1157.            X.I=X1.I
  1158.     End
  1159. RETURN Y.1
  1160.  
  1161. SortX: procedure Expose fo X.
  1162.     arg NRows
  1163.     L=(xtoy(2,int(log(NRows)/log(2))))-1
  1164.     Do Until L<1
  1165.     L=trunc(int(L/2))
  1166.     Do J=1 to L
  1167.             Do K=J+L To NRows By L
  1168.             I=K
  1169.             dumdat=X.I
  1170.             Do while I>L
  1171.                 y=I-L
  1172.                 If X.y ~> dumdat then Leave
  1173.                 X.I=X.y
  1174.                 I=I-L
  1175.             End
  1176.             X.I=dumdat
  1177.             End
  1178.         End
  1179.     End
  1180. Return
  1181.  
  1182. /* Function xinormal */
  1183. xinormal: Procedure
  1184.     arg p
  1185.       px=0
  1186.     pw=0
  1187.     f0=0
  1188.       p0=-0.322232431088 
  1189.       p1=-1.0 
  1190.       p2=-0.342242088547 
  1191.       p3=-0.0204231210245 
  1192.       p4=-0.0000453642210148 
  1193.       q0=0.099348462606 
  1194.       q1=0.588581570495 
  1195.       q2=0.531103462366 
  1196.       q3=0.10353775285 
  1197.       q4=0.0038560700634 
  1198.       pind=p
  1199.       IF (p < 1.0E-10) THEN DO
  1200.            xinormal = -10
  1201.           RETURN xinormal
  1202.     End
  1203.     IF (p >= 1.0) THEN DO
  1204.            xinormal = 10
  1205.           RETURN xinormal
  1206.     End
  1207.       IF (p = 0.5) THEN DO
  1208.           xinormal = 0.5
  1209.           RETURN xinormal
  1210.         End
  1211.     IF (p > 0.5) then p=p-1
  1212.       pw=SQRT(LOG(1/(p*p)))
  1213.       f0=(((pw*q4+q3)*pw+q2)*pw+q1)*pw+q0
  1214.       px=pw+((((pw*p4+p3)*pw+p2)*pw+p1)*pw+p0)/f0
  1215.       if (pind < 0.5) then px=-px
  1216.       xinormal = px
  1217. RETURN xinormal
  1218.  
  1219. cellrow: procedure
  1220. do
  1221.     parse arg cell
  1222.     do charpos=2 to length(cell)
  1223.     if datatype(substr(cell,charpos,1),n) then return substr(cell,charpos)
  1224.     end
  1225.     return 0
  1226. end
  1227. Return
  1228.  
  1229. cellcol: procedure
  1230. do
  1231.     parse arg cell
  1232.     labels="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  1233.     cell=upper(cell)
  1234.     len=length(cell)
  1235.     val=0
  1236. do charpos=1 to len
  1237.     if datatype(substr(cell,charpos,1),n) then
  1238.     do cell=reverse(substr(cell,1,charpos-1))
  1239.     do x=1 to length(cell)
  1240.     val=(26**(x-1))*pos(substr(cell,x,1),labels)+val
  1241.     end
  1242.     return val
  1243.     end
  1244.     end
  1245.     return 0
  1246. end
  1247. Return
  1248.  
  1249. syntax:
  1250.      if arg(1)='FAIL' then do
  1251.         'Message "Library is unavailable."'
  1252.         'DEFPUBSCREEN("Workbench")'
  1253.         exit
  1254.         end
  1255.     'Message "Unknown Syntax Error"'
  1256.     'DEFPUBSCREEN("Workbench")'
  1257.     exit
  1258.  
  1259. Format:  procedure
  1260.  
  1261.      arg number, before, after
  1262.      CallLine = SIGL
  1263.      if ~datatype(CallLine, 'N') then CallLine = '??'
  1264.  
  1265.      /* Make sure we have a number as first (required) argument    */
  1266.      if ~datatype(number, 'N') then do
  1267.         if number = '' then
  1268.            fc = 17     /* Wrong number of arguments           */
  1269.         else
  1270.            fc = 47     /* Arithmetic conversion error             */
  1271.         signal FormatSyntaxError
  1272.      end
  1273.      num = number + 0
  1274.      if before = '' & after = '' then
  1275.         return num
  1276.      else do
  1277.         parse var num integer '.' fraction
  1278.         if before = '' then before = length(integer)
  1279.         if after = '' then after = length(fraction)
  1280.         if ~datatype(before, N) | ~datatype(after, N) then
  1281.            do fc = 18
  1282.            signal FormatSyntaxError
  1283.        end
  1284.         if before < length(integer) then do
  1285.            fc = 18
  1286.            signal FormatSyntaxError
  1287.         end
  1288.         if after ~= length(fraction) then do
  1289.            fraction = trunc(('.'fraction'0') + ('.'copies('0', after)'5'), after)
  1290.         if integer<1&integer>-1 then integer=integer
  1291.            else integer = integer + (fraction % 1)
  1292.            fraction = substr(fraction, 3)
  1293.         end
  1294.         if fraction >= 0 then
  1295.            return right(integer, before)'.'fraction
  1296.         else
  1297.            return right(integer, before)
  1298.      end
  1299.  
  1300.  FormatSyntaxError:
  1301.         if show('F', STDERR) then
  1302.            call writeln(STDERR, '+++ Error' fc 'in line' CallLine':' errortext(fc))
  1303.         else
  1304.            mess='+++ Error' fc 'in line' CallLine':' errortext(fc)
  1305.         'Message' mess
  1306.         parse source Func .
  1307.         if Func = 'FUNCTION' then do
  1308.         'DEFPUBSCREEN("Workbench")'
  1309.            exit "Err"
  1310.         end
  1311.         else do
  1312.         'DEFPUBSCREEN("Workbench")'
  1313.            exit 10
  1314.         end
  1315.  
  1316. SWTAB: Procedure
  1317.     arg v n
  1318.     select 
  1319.         when v<-5.4 & v>=-7 then DO
  1320.         if n=3 then G=-3.29
  1321.         else G=0
  1322.         END
  1323.         when v<-5 & v>=-5.4 then DO
  1324.         if n=3 the G=-2.81
  1325.         else G=0
  1326.         END
  1327.         when v<-4.6 & v>=-5 then DO
  1328.         if n=3 then G=-2.68
  1329.         else G=0
  1330.         END
  1331.         when v<-4.2 & v>=-4.6 then DO
  1332.         if n=3 then G=-2.54
  1333.         else G=0
  1334.         END
  1335.         when v<-3.8 & v>=-4.2 then DO
  1336.         if n=3 then G=-2.4
  1337.         else G=0
  1338.         END
  1339.         when v<-3.4 & v>=-3.8 then DO
  1340.         if n=3 then G=-2.25
  1341.         if n=4 then G=-3.5
  1342.         else G=0
  1343.         END
  1344.         when v<-3 & v>=-3.4 then DO
  1345.         if n=3 then G=-2.1
  1346.         if n=4 then G=-3.27
  1347.         else G=0
  1348.         END
  1349.         when v<-2.6 & v>=-3 then DO
  1350.         if n=3 then G=-1.94
  1351.         if n=4 then G=-3.05
  1352.         if n=5 then G=-4.01
  1353.         else G=0
  1354.         END
  1355.         when v<-2.2 & v>=-2.6 then DO
  1356.         if n=3 then G=-1.77
  1357.         if n=4 then G=-2.84
  1358.         if n=5 then G=-3.7
  1359.         else G=0
  1360.         END
  1361.         when v<-1.8 & v>=-2.2 then DO
  1362.         if n=3 then G=-1.59
  1363.         if n=4 then G=-2.64
  1364.         if n=5 then G=-3.38
  1365.         else G=0
  1366.         END
  1367.         when v<-1.4 & v>=-1.8 then DO
  1368.         if n=3 then G=-1.4
  1369.         if n=4 then G=-2.44
  1370.         if n=5 then G=-3.11
  1371.         else G=0
  1372.         END
  1373.         when v<-1 & v>=-1.4 then DO
  1374.         if n=3 then G=-1.21
  1375.         if n=4 then G=-2.22
  1376.         if n=5 then G=-2.87
  1377.         else G=0
  1378.         END
  1379.         when v<-0.6 & v>=-1.0 then DO
  1380.         if n=3 then G=-1.01
  1381.         if n=4 then G=-1.96
  1382.         if n=5 then G=-2.56
  1383.         if n=6 then G=-3.72
  1384.         else G=0
  1385.         END
  1386.         when v<-0.2 & v>=-0.6 then DO
  1387.         if n=3 then G=-0.8
  1388.         if n=4 then G=-1.66
  1389.         if n=5 then G=-2.20
  1390.         if n=6 then G=-2.88
  1391.         END
  1392.         when v<0.2 & v>=-0.2 then DO
  1393.         if n=3 then G=-0.6
  1394.         if n=4 then G=-1.31
  1395.         if n=5 then G=-1.81
  1396.         if n=6 then G=-2.27
  1397.         END
  1398.         when v<0.6 & v>=0.2 then DO
  1399.         if n=3 then G=-0.39
  1400.         if n=4 then G=-0.94
  1401.         if n=5 then G=-1.41
  1402.         if n=6 then G=-1.85
  1403.         END
  1404.         when v<1 & v>=0.6 then DO
  1405.         if n=3 then G=-0.19
  1406.         if n=4 then G=-0.57
  1407.         if n=5 then G=-0.97
  1408.         if n=6 then G=-1.38
  1409.         END
  1410.         when V<1.4 & v>=1.0 then DO
  1411.         if n=3 then G=0
  1412.         if n=4 then G=-0.19
  1413.         if n=5 then G=-0.51
  1414.         if n=6 then G=-0.84
  1415.         END
  1416.         when v<1.8 & v>=1.4 then DO
  1417.         if n=3 then G=0.18
  1418.         if n=4 then G=0.15
  1419.         if n=5 then G=-0.06
  1420.         if n=6 then G=-0.33
  1421.         END
  1422.         when v<2.2 & v>=1.8 then DO
  1423.         if n=3 then G=0.35
  1424.         if n=4 then G=0.45
  1425.         if n=5 then G=0.37
  1426.         if n=6 then G=0.18
  1427.         END
  1428.         when v<2.6 & v>=2.2 then DO
  1429.         if n=3 then G=0.52
  1430.         if n=4 then G=0.74
  1431.         if n=5 then G=0.75
  1432.         if n=6 then G=0.64
  1433.         END
  1434.         when v<3 & v>=2.6 then DO
  1435.         if n=3 then G=0.67
  1436.         if n=4 then G=1
  1437.         if n=5 then G=1.09
  1438.         if n=6 then G=1.06
  1439.         END
  1440.         when v<3.4 & v>=3 then DO
  1441.         if n=3 then G=0.81
  1442.         if n=4 then G=1.23
  1443.         if n=5 then G=1.4
  1444.         if n=6 then G=1.45
  1445.         END
  1446.         when v<3.8 & v>=3.4 then DO
  1447.         if n=3 then G=0.95
  1448.         if n=4 then G=1.44
  1449.         if n=5 then G=1.67
  1450.         if n=6 then G=1.83
  1451.         END
  1452.         when v<4.2 & v>=3.8 then DO
  1453.         if n=3 then G=1.07
  1454.         if n=4 then G=1.65
  1455.         if n=5 then G=1.91
  1456.         if n=6 then G=2.17
  1457.         END
  1458.         when v<4.6 & v>=4.2 then DO
  1459.         if n=3 then G=1.19
  1460.         if n=4 then G=1.85
  1461.         if n=5 then G=2.15
  1462.         if n=6 then G=2.5
  1463.         END
  1464.         when v<5 & v>=4.6 then DO
  1465.         if n=3 then G=1.31
  1466.         if n=4 then G=2.03
  1467.         if n=5 then G=2.47
  1468.         if n=6 then G=2.77
  1469.         END
  1470.         when v<5.4 & v>=5 then DO
  1471.         if n=3 then G=1.42
  1472.         if n=4 then G=2.19
  1473.         if n=5 then G=2.85
  1474.         if n=6 then G=3.09
  1475.         END
  1476.         when v<5.8 & v>=5.4 then DO
  1477.         if n=3 then G=1.52
  1478.         if n=4 then G=2.34
  1479.         if n=5 then G=3.24
  1480.         if n=6 then G=3.54
  1481.         END
  1482.         when v<6.2 & v>=5.8 then DO
  1483.         if n=3 then G=1.62
  1484.         if n=4 then G=2.48
  1485.         if n=5 then G=3.64
  1486.         if n=6 then G=0
  1487.         END
  1488.         when v<6.6 & v>=6.2 then DO
  1489.         if n=3 then G=1.72
  1490.         if n=4 then G=2.62
  1491.         else G=0
  1492.         END
  1493.         when v<7 & v>=6.6 then DO
  1494.         if n=3 then G=1.81
  1495.         if n=4 then G=2.75
  1496.         else G=0
  1497.         END
  1498.         when v<7.4 & v>=7 then DO
  1499.         if n=3 then G=1.9
  1500.         if n=4 then G=2.87
  1501.         else G=0
  1502.         END
  1503.         when v<7.8 & v>=7.4 then DO
  1504.         if n=3 then G=1.98
  1505.         if n=4 then G=2.97
  1506.         else G=0
  1507.         END
  1508.         when v<8.2 & v>=7.8 then DO
  1509.         if n=3 then G=2.07
  1510.         if n=4 then G=3.08
  1511.         else G=0
  1512.         END
  1513.         when v<8.6 & v>=8.2 then DO
  1514.         if n=3 then G=2.15
  1515.         if n=4 then G=3.22
  1516.         else G=0
  1517.         END
  1518.         when v<9 & v>=8.6 then DO
  1519.         if n=3 then G=2.23
  1520.         if n=4 then G=3.36
  1521.         else G=0
  1522.         END
  1523.         when v<9.4 & v>=9 then DO
  1524.         if n=3 then G=2.31
  1525.         else G=0
  1526.         END
  1527.         when v<9.8 & v>=9.4 then DO
  1528.         if n=3 then G=2.38
  1529.         else G=0
  1530.         END
  1531.         when v>=9.8 then DO
  1532.         if n=3 then G=2.45
  1533.         else G=0
  1534.         END
  1535.     OTHERWISE nop
  1536.     END
  1537. RETURN G
  1538.  
  1539. calcp: Procedure
  1540.     arg g
  1541.     factk=1
  1542.     pp=0
  1543.     itts=0
  1544.     term=1
  1545.     k=0
  1546.     do while abs(term)>(exp(-23))
  1547.         term=.3989422804*((-1)**k)*(g**k)/(2*k+1)/(2**k)*(g**(k+1))/factk
  1548.         pp=pp+term
  1549.         k=k+1
  1550.         factk=factk*k
  1551.     end
  1552.     pp=pp+.5
  1553.     if (pp<.0000000001) then pp=0
  1554.     return pp
  1555.